﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WinFormCenter.包租公.model {
    /// <summary>
    ///研究点数很多地方需要使用,租客使用家具时概率获得,外出概率获得
    ///租客看房 根据舒适度,租金,房间持有的能力决定是否入住,满意度越高,礼金越高
    ///研究房间的最大同居数和宠物的居住情况,可以逐渐形成大家族
    ///租客使用家具会获得隐藏的能力,可以提高魅力和头脑.
    ///同种家具放置多份,品味降低,租金和舒适度下降
    ///道具:购买,奖励,外出意外获取.
    ///职业水平,工作积累工作经验,从而提高职业水平.月收入随之提高
    ///兴趣发挥到极致,用来找工作,挑战称号,新发现,降低转职难度.
    ///年龄 婴儿1年 儿童1年,学生3年,成人8年,老人3年
    ///儿童考试进入学校成为学生,根据能力 上学的成长幅度不一,需设计公式
    ///扩建
    ///年龄/兴趣/职业达到极致,迎来人生重大挑战.获得称号可以提高工资
    ///与潜在恋人关系变亲密后,可能会决定结婚.人气越高越容易亲密.求婚失败可以稍后重试.
    ///租客使用公共设备,进行社交,可能成为潜在恋人
    ///结婚后,幸福度到一定值,就会迎接新生命
    ///租客的小孩成年后搬出公寓
    ///票券可以获得服装和家具,钱,点数
    ///服装 抽奖得到服装
    ///外出可能买到宠物
    ///专用房间:家具+地板组合,提高租金和舒适度,使用家具获得的能力也提高
    ///21年后游戏结束,部分游戏数据可以继承到下一周目
    ///
    /// </summary>
    internal class Apartment {
        //租客数量
        public int SumTenant { set; get; }
        //宠物数
        public int SumPet { set; get; }
        //月收入(理论)
        public int Income { set; get; }
        //月收入(实际)
        public int IncomeReal { set; get; }
        //月支出
        public int Expenditure { set; get; }
        //奖杯数
        public int SumTrophy { set; get; }
        //实际租金总收
        public int SumRent { set; get; }
        //已安装家具总数
        public int SumFurniture { set;get; }
        //总舒适度
        //解锁职业数
        //总称号数 发现称号
        //总兴趣数      发现兴趣
        //总外出地点数
        //合计幸福度

    }
    //租客
    internal class Tenant {

       
        //金钱,
        public int Money { set; get; }
        //脑力 就业考试
        public int MentalAbility { set; get; }
        //运动能力 移动速度
        public int SportAbility { set; get; }
        //魅力(人气) 恋爱能力
        public int CharmAbility { set; get; }
        //职业潜力(兴趣) 称号挑战
        public int ProfessionAblility { set; get; }
        //性格 影响外出地
        public Personality Personality { set; get; }
        //月收入
        public int Income { set; get; }
        //潜在恋人 通过外出增加
        public Tenant[] PotentialLovers { set; get; }
        //称号 伟大功绩的证明
        public Appellation[] Appellations { set; get; }
        //擅长 通过家具发现 TODO
        public Object? GootAt { set; get; }
        //志愿 应考生的志愿学校 TODO

        public static void Acn() {
            Tenant[] tenants= [];
            var a=from t in tenants where t.Money == 0 orderby t.MentalAbility select t.SportAbility;
            foreach (var item in a) {
                
            }
           


        }
        


        public Tenant() {
            
            PotentialLovers = [];
            Appellations = [];
            //Personality =; 初始化时随机赋予性格
        }

    }
    //性格
    internal enum Personality {

    }
    //称号
    internal enum Appellation {

    }
    //爱好
    internal enum Hobby {
        Study,
        Read,
        Write,
        Drawing,
        IT,
        Sport,
        Running,
        Game,
        Fitness,
        Chat,
        Cook,
        Makeup,
        NewStyle,
    }
    /// <summary>
    /// 职业
    /// </summary>
    internal struct Profession(Hobby hobby, string hobbyName, string name) {
        private static readonly Dictionary<Hobby, Profession> _professions = [];
        static Profession() {
            Add(Hobby.Study,"学习","学者");
            Add(Hobby.Read, "阅读", "编辑");
            Add(Hobby.Write, "写作", "作家");
            Add(Hobby.Drawing, "画画", "画家");
            Add(Hobby.IT, "IT", "软件工程师");
            Add(Hobby.Sport, "运动", "运动员");
            Add(Hobby.Running, "跑步", "马拉松运动员");
            Add(Hobby.Game, "游戏", "电竞选手");
            Add(Hobby.Fitness, "健身", "健身教练");
            Add(Hobby.Chat, "闲聊", "咨询师");
            Add(Hobby.Cook, "料理", "厨师");
            Add(Hobby.Makeup, "化妆", "化妆师");
            Add(Hobby.NewStyle, "前卫", "行为艺术家");
        }
        private static void Add(Hobby hobby, string hobbyName, string name) => _professions.Add(hobby, new Profession(hobby, hobbyName, name));

        public Hobby Hobby { set; get; } = hobby;
        public string HobbyName { set; get; } = hobbyName;
        public string Name { set; get; } = name;
    }
    internal static class EnumExtensions {
        internal static string Name(this Hobby hobby) => hobby switch {
            Hobby.Study => "学习",
            Hobby.IT => "IT",
            Hobby.Read=>"阅读",
            Hobby.Sport => "运动",
            Hobby.Fitness=>"健身",
            Hobby.Chat=>"闲聊",
            Hobby.Cook=>"料理",
            Hobby.Makeup=>"化妆",
            Hobby.NewStyle=>"前卫",
                
            _ => throw new NotImplementedException(),
        };
    }
}
